package com.atguigu.jdbc;

import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

/*
    让Java程序连接MySQL数据库。
    注意事项：
        1.数据库可以正常使用
        2.数据库的账号密码必须正确
        3.提供Mysql的驱动包
            注意：mysql驱动包的版本号要和mysql数据库对应。
                  5.7 ---> 5.1.37
                  8.0  ----> 8.0.19
 */
public class JDBCDemo {

    /*
        方式一：
     */
    @Test
    public void test() throws SQLException {
        //1.创建Driver的实例
        Driver driver = new com.mysql.jdbc.Driver();
        //2.获取连接对象Connection
        //mysql的连接地址 ：jdbc:mysql://ip地址:mysql的端口号/库名
        String url = "jdbc:mysql://localhost:3306/myemployees";
        //在properties设置mysql的账号和密码
        Properties p = new Properties();
        p.setProperty("user","root");//mysql的账号
        p.setProperty("password","123321");//mysql的密码
        Connection connect = driver.connect(url, p);
        System.out.println(connect);
    }

    /*
        方式二 ：DriverManager
     */
    @Test
    public void test2() throws SQLException {
        //1.创建Driver对象
        Driver driver = new com.mysql.jdbc.Driver();
        //2.注册Driver
        DriverManager.registerDriver(driver);
        //3.获取连接对象
        String url = "jdbc:mysql://localhost:3306/myemployees";
        String user = "root";
        String pwd = "123321";
        Connection connection = DriverManager.getConnection(url, user, pwd);

        System.out.println(connection);
    }

    /*
       方式三 ：通过对Driver类进行类加载。那么在该类中就会创建Driver对象并注册
    */
    @Test
    public void test3() throws SQLException, ClassNotFoundException {
        //1.Drvier类进行类加载
        Class.forName("com.mysql.jdbc.Driver");
        //3.获取连接对象
        String url = "jdbc:mysql://localhost:3306/myemployees";
        String user = "root";
        String pwd = "123321";
        Connection connection = DriverManager.getConnection(url, user, pwd);

        System.out.println(connection);
    }


    @Test
    public void test4() throws ClassNotFoundException {
        Class.forName("com.atguigu.jdbc.A");
    }


    /*
        方式四 ： 终结版 (通过读取文件配置的方式 获取连接)
     */
    @Test
    public void test5(){
        InputStream fis = null;
        try {
            //一 读取配置文件内容
            //1.创建Properties的对象
            Properties p = new Properties();
            //2.创建流 - 文件输入流
            //默认目录：项目的根目录下（编译后的项目）
            fis
                    = this.getClass().getClassLoader().getResourceAsStream("jdbc.properties");
            //3.加载流
            p.load(fis);
            //4.读取文件中的内容
            String username = p.getProperty("username");
            String pwd = p.getProperty("pwd");
            String url = p.getProperty("url");
            String driverClass = p.getProperty("driverClass");

            //二 获取连接对象
            //1.Drvier类进行类加载
            Class.forName(driverClass);
            //3.获取连接对象
            Connection connection = DriverManager.getConnection(url, username, pwd);
            System.out.println(connection);

        }catch (Exception e){
            e.printStackTrace();
        }finally {
            //5.关资源
            try {
                if (fis != null) {
                    fis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}

class A{
    static{
        System.out.println("AAAAAAAAAAAAAAAAAA");

    }
}
